/**
 * 模块数据的主显示区域，继承自Grid 
 */
Ext.define('app.view.module.region.Grid', {

	extend: 'Ext.grid.Panel',
	
	alias: 'widget.modulegrid',
	
	requires : [
		'Ext.selection.CellModel', 
		'Ext.grid.*', 
		'Ext.data.*',
		'Ext.util.*'
	],
	
	uses: [
		'app.view.module.region.GridToolbar',
		'app.view.module.factory.ColumnFactory',
		'app.view.module.widget.GridSchemeChangeCombo'
	],
	
	bind: {
		title: '{tf_title} {selectedNames}', //数据绑定到ModuleModel中的tf_title  
		gridSchemeId : '{gridSchemeId}' // 属性gridSchemeId设置绑定，和GridSchemeCombo是value绑定是一样的
		// ＊＊＊＊＊＊＊＊＊＊＊＊这里有个问题，就是所有的模块都绑定了相同的gridSchemeId,以后解决
	},
	
	columnLines : true, // 加上表格线 
	multiSelect : true, //是否允许多选
	enableLocking : true, // 使grid可以锁定列
	
    initComponent: function() {
    	var viewModel = this.up('modulepanel').getViewModel();
    	
    	this.viewConfig = {
    		stripeRows : true, // 奇偶行不同底色
    		enableTextSelection : false,  
    		// 加入允许拖动功能  
		    plugins : [{  
		        ptype : 'gridviewdragdrop',  
		        ddGroup : 'DD_grid_' + viewModel.get('tf_moduleName'), // ddGroup是一个分组，最好是设置成唯一的.拖动分组必须设置，这个分组名称为:DD_grid_Global  
		        enableDrop : false  // 设为false，不允许在本grid中拖动  
	        }] 
    	};
    	
    	// 创建grid列
		// 默认第一个grid方案
		this.gridSchemeId = viewModel.get('tf_gridSchemes')[0].tf_schemeOrder;
		
		// 将第一个方案的columns生成，第一个方案是要先设置好，并不是gridschemecombo触发来生成的
    	this.columns = app.view.module.factory.ColumnFactory.getColumns(viewModel);
    	
    	//双击进行修改
    	this.cellEditing = new Ext.grid.plugin.CellEditing({
    		clicksToEdit: 2 //clicksToEdit 如果设置成1,则会是单击修改。
    	});
    	this.plugins = [this.cellEditing];
    	
    	//在pagingtoolbar中使用方案选择的控件
    	this.dockedItems = [{
    		xtype: 'gridtoolbar',
    		dock: 'top',
    		grid: this
    	}, {
    		xtype: 'pagingtoolbar',
    		store: this.store,
    		displayInfo: true,
    		prependButtons: true,
    		dock: 'bottom',
    		items: [{
    			xtype: 'gridschemechangecombo'
    		}]
    	}];
    	
    	this.callParent();
    },
    
    listeners: {
    	//当选中的一条记录发生变化时触发此事件
    	selectionChange: 'selectionChange'
    },
    
    /**
	 * 在选中的记录发生变化时，修改当前title，这是不用MVVM特性的做法
	 */
	refreshTitle : function() {
		var viewModel = this.up('modulepanel').getViewModel();
		var selected = this.getSelectionModel().getSelection();
		var title = viewModel.get('tf_title');
		if (selected.length > 0) {
			if (!!selected[0].getNameValue())
				title = title + '　〖<em>' + selected[0].getNameValue() + '</em>'
						+ (selected.length > 1 ? ' 等' + selected.length + '条' : '') + '〗';
		}
		this.setTitle(title);
	},

	/**
	 * 重新适应所有列的宽度
	 */
	columnAutoSize : function() {
		Ext.Array.forEach(this.columnManager.getColumns(), function(column) {
			if (!column.autoSizeDisabled) {
				column.autoSize();
			}
		})
	},
	
	/**
	 * 重新选择了列表方案之后，替换方案中的字段
	 */
	setGridSchemeId : function(value) {
		if (this.gridSchemeId != value) {
			this.gridSchemeId = value;
			Ext.suspendLayouts();
			this.columns = app.view.module.factory.ColumnFactory.getColumns(this.up('modulepanel').getViewModel(), value);
			this.reconfigure(this.store, this.columns);
			Ext.resumeLayouts(true);
			this.columnAutoSize();
		}
	}
}); 